home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / game / astg / astg.bas next >
BASIC Source File  |  1995-08-11  |  36KB  |  980 lines

  1. 10 SCREEN@ 0:SCREEN 1,0,0,0:PALETTE@:CLS
  2. 20 ARROWMAX=3
  3. 30 ENEMYMAX=5:WEPONMAX=5
  4. 40 RANDOMIZE TIME
  5. 50 DIM C%(63),AREX(ARROWMAX),ENEX(ENEMYMAX),ENNX(ENEMYMAX),ENNY(ENEMYMAX),ENWT(ENEMYMAX),ENKI(ENEMYMAX),ENFL(ENEMYMAX),WEEX(WEPONMAX+8),WECL(WEPONMAX+8),WEDX(WEPONMAX+8),WEDY(WEPONMAX+8),CNTN(7),SDATA%(8)
  6. 60 DIM SE1%(1020),SE2%(4040),SE3%(5117),SE4%(186),SE8%(154),SE9%(1113)
  7. 70 LOAD@ "se1.snd",SE1%
  8. 80 LOAD@ "se2.snd",SE2%
  9. 90 LOAD@ "se3.snd",SE3%
  10. 100 LOAD@ "se4.snd",SE4%
  11. 110 LOAD@ "se18.snd",SE8%
  12. 120 LOAD@ "se19.snd",SE9%
  13. 130 '
  14. 140 LOAD@ "sprite_c.tif",(0,0):DEF SPRITE 3,0
  15. 150 FOR A=0 TO 319                'スプライトデータの設定
  16. 160   X=A MOD 32:Y=A \ 32
  17. 170   GET@A (X*16,Y*16)-(X*16+15,Y*16+15),C%
  18. 180   DEF SPRITE 0,A,C%,0
  19. 190 NEXT
  20. 200 '
  21. 210 SCREEN@ 1:SCREEN 0
  22. 220 *SHOKISETTEI
  23. 230 SPRITE ON:SPRITE SCREEN (32,0)
  24. 240 VIEW (0,0)-(511,255):WINDOW (0,0)-(511,255)
  25. 250 CLS
  26. 260 PAUSPRITE=94:THSPRITE=PAUSPRITE+3:PLSPRITE=THSPRITE+9
  27. 270 ENSPRITE=PLSPRITE+ARROWMAX+2:WESPRITE=ENSPRITE+22
  28. 280 JAWSPRITE=WESPRITE+ENEMYMAX+8
  29. 290 '
  30. 300 DEF SPRITE 1,PAUSPRITE,(110,110),56,3,1,,0
  31. 310 DEF SPRITE 1,200,(95,170),59,5,1,,0
  32. 320 DEF SPRITE 1,205,(0,204),312,4,2,,0
  33. 330 DEF SPRITE 1,213,(226,230),311,1,1,,0
  34. 340 DEF SPRITE 1,214,(236,230),224+CREDIT,1,1,,0
  35. 350 '
  36. 360 DEF SPRITE 1,81,(189,138),70,1,1,,0
  37. 370 DEF SPRITE 1,82,(190,150),86,1,1,,0
  38. 380 DEF SPRITE 1,83,(190,160),261,1,1,,0
  39. 390 DEF SPRITE 1,84,(190,170),87,1,1,,0
  40. 400 DEF SPRITE 1,85,(220,139),226,1,1,,0
  41. 410 DEF SPRITE 1,86,(212,151),224,1,1,,0
  42. 420 DEF SPRITE 1,87,(220,151),224,1,1,,0
  43. 430 DEF SPRITE 1,88,(212,171),224,1,1,,0
  44. 440 DEF SPRITE 1,89,(220,171),224,1,1,,0
  45. 450 DEF SPRITE 1,90,(212,161),224,1,1,,0
  46. 460 DEF SPRITE 1,91,(220,161),224,1,1,,0
  47. 470 GOTO *MAIN
  48. 480 '
  49. 490 *NILL
  50. 500 FOR NI=0 TO 30:NEXT
  51. 510 *NILL2
  52. 520 FOR NI=0 TO 20:NEXT
  53. 530 RETURN
  54. 540 '
  55. 550 *MOJI_SET
  56. 560 DEF SPRITE 1,0,(3,200),16,3,1,,0:SPRITE 0,0,1
  57. 570 DEF SPRITE 1,3,(6,216),19,2,1,,0:SPRITE 0,3,1
  58. 580 FOR MOA=0 TO 10
  59. 590   DEF SPRITE 1,MOA+7,(50+MOA*15,200),0,1,1,,0:SPRITE 0,MOA+7,1
  60. 600   DEF SPRITE 1,MOA+30,(50+MOA*15,216),0,1,1,,0
  61. 610 NEXT
  62. 620 FOR MOA=0 TO 9
  63. 630   DEF SPRITE 1,MOA+18,(50,200),22,1,1,,0:SPRITE 0,MOA+18,1 
  64. 640   DEF SPRITE 1,MOA+41,(50,216),22,1,1,,0
  65. 650 NEXT
  66. 660 DEF SPRITE 1,6,(PLLM+49,200),23,1,1,,0:SPRITE 0,6,1
  67. 670 DEF SPRITE 1,28,(35,216),21,1,1,,0
  68. 680 DEF SPRITE 1,29,(209,216),23,1,1,,0
  69. 690 *PLAYER_LPMAX
  70. 700 SPRITE 6,6,PLLM-SPRITE(6,6)+49,0
  71. 710 FOR PLA=0 TO 9
  72. 720   IF PLA*16+15<PLLM THEN
  73. 730     SPRITE 6,PLA+18,PLA*16+50-SPRITE(PLA+18,6),0
  74. 740   ELSE
  75. 750     SPRITE 6,PLA+18,PLLM+34-SPRITE(PLA+18,6),0
  76. 760   ENDIF
  77. 770 NEXT
  78. 780 *PLAYER_LP
  79. 790 FOR PLA=0 TO 10
  80. 800   IF PLA*15+14<PLLP THEN
  81. 810     SPRITE 1,PLA+7,15
  82. 820   ELSE IF PLA*15+1>PLLP THEN
  83. 830     SPRITE 1,PLA+7,0
  84. 840   ELSE
  85. 850     SPRITE 1,PLA+7,PLLP-PLA*15
  86. 860   ENDIF
  87. 870 NEXT
  88. 880 IF PLLP=0 THEN GOTO *GAMEOVER
  89. 890 RETURN
  90. 900 *ENEMY_LPMAX
  91. 910 IF (BARFLAG>0 AND ENENUM=BARNUM) THEN GOTO *ENEMY_LP
  92. 920 SPRITE 0,28,1
  93. 930 SPRITE 6,29,ENLM(ENENUM)-SPRITE(29,6)+49,0:SPRITE 0,29,1
  94. 940 FOR ENA=0 TO 9
  95. 950   IF ENA*16+15<ENLM(ENENUM) THEN
  96. 960     SPRITE 6,ENA+41,ENA*16+50-SPRITE(ENA+41,6),0
  97. 970   ELSE
  98. 980     SPRITE 6,ENA+41,ENLM(ENENUM)+34-SPRITE(ENA+41,6),0
  99. 990    ENDIF
  100. 1000 NEXT
  101. 1010 FOR ENA=0 TO 9:SPRITE 0,ENA+41,1:NEXT
  102. 1020 SPRITE 1,3,(ENKI(ENENUM)*8+68)-(BOSSFLAG=1)*26
  103. 1030 *ENEMY_LP
  104. 1040 BARNUM=ENENUM
  105. 1050 IF ENLP(ENENUM)<1 THEN
  106. 1060   ENLP(ENENUM)=0
  107. 1070   ENWT(ENENUM)=8
  108. 1080   ENEMDD(ENENUM)=8:BARNUM=-1
  109. 1090 ENDIF
  110. 1100 FOR ENA=0 TO 10
  111. 1110   IF ENA*15+14<ENLP(ENENUM) THEN
  112. 1120     SPRITE 1,ENA+30,15
  113. 1130   ELSE IF ENA*15+1>ENLP(ENENUM) THEN 
  114. 1140     SPRITE 1,ENA+30,0
  115. 1150   ELSE
  116. 1160     SPRITE 1,ENA+30,ENLP(ENENUM)-ENA*15
  117. 1170   ENDIF
  118. 1180 NEXT
  119. 1190 FOR ENA=0 TO 10:SPRITE 0,ENA+30,1:NEXT:BARFLAG=30
  120. 1200 RETURN
  121. 1210 *BARERASE
  122. 1220 BARFLAG=0:ENBARNUM=-1
  123. 1230 FOR BEA=28 TO 50:SPRITE 0,BEA,0:NEXT
  124. 1240 SPRITE 1,3,19
  125. 1250 RETURN
  126. 1260 '
  127. 1270 *COINSP
  128. 1280 IF (COIN=>CONEXT AND PLLV<31) THEN             'レベルアップ
  129. 1290 PCMPLAY SE3%
  130. 1300   PLUP=INT(RND*3)*2:COIN=COIN-CONEXT
  131. 1310   PLLV=PLLV+1:IF PLLV=31 THEN COIN=0
  132. 1320   PLLM=PLLM+PLUP:IF PLLM>160 THEN PLLM=160
  133. 1330   PLLP=PLLP+8:IF PLLP>PLLM THEN PLLP=PLLM
  134. 1340   PLAV=PLAV-(RND<.95!)-(RND<.4!)-(RND<.1!):CONEXT=15*(PLLV+1)^2
  135. 1350   ARROWDAM=ARROWDAM+INT(RND*3)+1
  136. 1355   THUNDAMAGE=THUNDAMAGE+INT(RND*5+RND*3)
  137. 1360   GOSUB *PLAYER_LPMAX
  138. 1370 ENDIF
  139. 1380 COA=CONEXT-COIN
  140. 1390 IF PLLV=31 THEN
  141. 1400   SPRITE 1,76,355:COA=COIN
  142. 1410   SPRITE 1,80,359
  143. 1420 ELSE
  144. 1430   SPRITE 1,76,PLLV+224
  145. 1440 ENDIF
  146. 1450 IF COA<10000 THEN
  147. 1460   FOR COB=0 TO 3
  148. 1470     COC=(COA \ (10^COB))MOD 10
  149. 1480     SPRITE 1,72+COB,COC+224
  150. 1490   NEXT
  151. 1500   SPRITE 1,5,0
  152. 1510 ELSE
  153. 1520   FOR COB=0 TO 3:SPRITE 1,72+COB,233:NEXT
  154. 1530   SPRITE 1,5,332
  155. 1540 ENDIF
  156. 1550 SPRITE 1,77,(MAGNUM MOD 10)+224
  157. 1560 IF MAGNUM>9 THEN SPRITE 1,78,256 ELSE SPRITE 1,78,0
  158. 1570 RETURN
  159. 1580 '
  160. 1590 *PAUSE
  161. 1600 SPRITE 0,PAUSPRITE,1
  162. 1610 SPRITE 1,70,78:SPRITE 6,76,6,0:SPRITE 0,80,0
  163. 1620 IF MAGNUM<100000 THEN
  164. 1630   FOR COA=0 TO 4
  165. 1640     COC=(MAGNUM \ (10^COA))MOD 10
  166. 1650     SPRITE 1,72+COA,COC+224
  167. 1660   NEXT
  168. 1670   SPRITE 1,5,0
  169. 1680 ELSE
  170. 1690   FOR COA=0 TO 4:SPRITE 1,72+COA,233:NEXT
  171. 1700   SPRITE 1,5,256
  172. 1710 ENDIF
  173. 1720 IF PLLV<32 THEN SPRITE 1,85,PLLV+224
  174. 1730 SPRITE 1,86,(ARROWDAM \ 10)+224
  175. 1740 SPRITE 1,87,(ARROWDAM MOD 10)+224
  176. 1750 SPRITE 1,88,((PLAV \ 10)MOD 10)+224
  177. 1760 SPRITE 1,89,(PLAV MOD 10)+224
  178. 1770 SPRITE 1,90,(THUNDAMAGE \ 10)+224
  179. 1780 SPRITE 1,91,(THUNDAMAGE MOD 10)+224
  180. 1790 FOR COA=0 TO 10:SPRITE 0,81+COA,1:NEXT
  181. 1800 *PAUSE_LOOP
  182. 1810 TPAUSE=PTRIG(1)
  183. 1820 IF TPAUSE=4 THEN *PAUSE_LOOP
  184. 1830 *PAUSE_LOOP2
  185. 1840 TPAUSE=PTRIG(1)
  186. 1850 IF TPAUSE<>4 THEN *PAUSE_LOOP2
  187. 1860 *PAUSE_LOOP3
  188. 1870 TPAUSE=PTRIG(1)
  189. 1880 IF TPAUSE=4 THEN *PAUSE_LOOP3
  190. 1890 FOR COA=0 TO 10:SPRITE 0,81+COA,0:NEXT
  191. 1900 SPRITE 0,PAUSPRITE,0:SPRITE 1,70,70:SPRITE 6,76,-6,0:SPRITE 0,80,1
  192. 1910 GOSUB *COINSP
  193. 1920 RETURN
  194. 1930 '
  195. 1940 *PLAYER
  196. 1950 PLPATTERN=CTBASE+48
  197. 1960   SPRITE 1,PLSPRITE,PLPATTERN
  198. 1970 PLDX=0:PLDY=0:T=PTRIG(1):S=PAD(1)
  199. 1980 IF (T=0 OR BOTTA>-1) THEN 
  200. 1990   PLDX=((S>5 AND S<9)-(S>1 AND S<4))*4
  201. 2000   PLDY=(S=8 OR S=1 OR S=2)*4-(S>3 AND S<7)*4
  202. 2010 ELSE IF (T=1 AND ARWFLAG=0) THEN             'triggerA input routin
  203. 2020     ARA=0:ARB=-1
  204. 2030     WHILE(ARA<=ARROWMAX)
  205. 2040       IF AREX(ARA)=0 THEN ARB=ARA
  206. 2050       ARA=ARA+1
  207. 2060     WEND
  208. 2070     IF ARB>-1 THEN 
  209. 2080       AREX(ARB)=1:ARWFLAG=4
  210. 2090       DEF SPRITE 1,PLSPRITE+ARB+1,(PLNX+5,PLNY-4),30,1,1,,0
  211. 2100       SPRITE 1,PLSPRITE,50
  212. 2110       SPRITE 0,PLSPRITE+ARB+1,1
  213. 2120     ENDIF
  214. 2130 ELSE IF (T=2 AND ARWFLAG=0) THEN             'triggerB input routin
  215. 2140     ARA=0:ARB=-1
  216. 2150     WHILE(ARA<=ARROWMAX)
  217. 2160       IF AREX(ARA)=0 THEN ARB=ARA
  218. 2170       ARA=ARA+1
  219. 2180     WEND
  220. 2190     IF ARB>-1 THEN 
  221. 2200       AREX(ARB)=2:ARWFLAG=20
  222. 2210       DEF SPRITE 1,PLSPRITE+ARB+1,(PLNX+5,PLNY-4),29,1,1,,0
  223. 2220       SPRITE 1,PLSPRITE,50
  224. 2230       SPRITE 0,PLSPRITE+ARB+1,1
  225. 2240     ENDIF
  226. 2250 ELSE IF T=8 THEN                           'SELECT input routin
  227. 2260     MAB=0
  228. 2270     FOR MAA=ENEMYMAX TO 0 STEP -1
  229. 2280 IF (ENEX(MAA)=1 AND MAGNUM>0 AND ENEMDD(MAA)=0 AND ENNX(MAA)>0) THEN
  230. 2290         MAGNUM=MAGNUM-1:MAB=1
  231. 2300         SPRITE 1,PLSPRITE,51
  232. 2310         IF ENNY(MAA)>120 THEN MY=ENNY(MAA)-120 ELSE MY=391+ENNY(MAA)
  233. 2320         IF ENKI(MAA)=5 THEN PCMPLAY SE4% ELSE PCMPLAY SE2%
  234. 2330         DEF SPRITE 1,THSPRITE,((ENNX(MAA)MOD 512)+3,MY),40,1,8,,0
  235. 2340         SPRITE 0,THSPRITE,1
  236. 2350    THUN=INT(THUNDAMAGE*.9!+PLLV*5*(BOSSFLAG=1)+RND*THUNDAMAGE/5)
  237. 2360         ENLP(MAA)=ENLP(MAA)-(ENKI(MAA)<>5)*THUN*(THUN>0)
  238. 2370         ENENUM=MAA:GOSUB *ENEMY_LPMAX:TRGB=1
  239. 2380         GOSUB *COINSP
  240. 2390       ENDIF
  241. 2400     NEXT
  242. 2410     IF MAB=1 THEN PLDY=-(BOSSFLAG=0)
  243. 2420 ENDIF
  244. 2430 PLNX=PLNX+PLDX:PLNY=PLNY+PLDY
  245. 2440 IF PLNX<0 THEN PLDX=-PLNX:PLNX=0
  246. 2450 IF PLNX>240 THEN PLDX=240-PLNX:PLNX=240
  247. 2460 IF PLNY<PLYMAX THEN PLDY=PLYMAX-PLNY:PLNY=PLMMAX
  248. 2470 IF PLNY>220 THEN PLDY=220-PLNY:PLNY=220
  249. 2480 SPRITE 6,PLSPRITE,PLDX,PLDY
  250. 2490 PLNX=SPRITE(PLSPRITE,6):PLNY=SPRITE(PLSPRITE,7)
  251. 2500 FOR ARB=0 TO ARROWMAX
  252. 2510   IF AREX(ARB)<>0 THEN
  253. 2520     SPRITE 6,PLSPRITE+ARB+1,0,ARROWSPEED
  254. 2530     ARROWY=SPRITE(PLSPRITE+ARB+1,7)
  255. 2540     IF ARROWY>255 THEN
  256. 2550       AREX(ARB)=0:SPRITE 0,PLSPRITE+ARB+1,0
  257. 2560     ENDIF
  258. 2570     ELSE
  259. 2580       GOSUB *NILL2
  260. 2590   ENDIF
  261. 2600 NEXT
  262. 2610 RETURN
  263. 2620 '
  264. 2630 *ENEMY
  265. 2640 IF BOSSCOUNT=0 THEN
  266. 2650   ENB=-1
  267. 2660   FOR ENA=0 TO ENEMYMAX
  268. 2670     IF ENEX(ENA)=0 THEN ENB=ENA
  269. 2680   NEXT
  270. 2690   IF ENB=-1 THEN GOTO *ENEMY_MOVE
  271. 2700   ENEX(ENB)=1
  272. 2710   IF (RND*100<(ENEMYNUM-50) AND PDCH=0) THEN
  273. 2720     ENKI(ENB)=5
  274. 2730     PDCH=1
  275. 2740   ELSE 
  276. 2750     ENKI(ENB)=INT(RND*5)
  277. 2760   ENDIF
  278. 2770   *ENEMY_XY
  279. 2780   EX=20+INT(RND*200):EY=30+INT(RND*140)
  280. 2790   IF (ABS(EX-PLNX)<20 AND ABS(EY-PLNY)<20) THEN GOTO *ENEMY_XY
  281. 2800   IF ENKI(ENB)=2 THEN               'あいあいぱちぱち
  282. 2810     ENWT(ENB)=0
  283. 2820     ENNX(ENB)=EX:ENNY(ENB)=40
  284. 2830     ENLM(ENB)=(PLLV-1)*4+(INT(RND*6)+1)*2+20
  285. 2840   ELSE
  286. 2850     ENWT(ENB)=10+INT(RND*20)
  287. 2860     ENNX(ENB)=EX:ENNY(ENB)=EY
  288. 2870     ENLM(ENB)=ENKI(ENB)*(PLLV-1)*2+(INT(RND*6)+1)*2+20
  289. 2880   ENDIF
  290. 2890   ENDX(ENB)=0:ENDY(ENB)=0
  291. 2900   IF PLLV<4 THEN ENLM(ENB)=16-((ENKI(ENB)+INT(RND*4))*2)*(PLLV>1)
  292. 2910   IF ENLM(ENB)>160 THEN ENLM(ENB)=160
  293. 2920   IF ENKI(ENB)=5 THEN ENLM(ENB)=68
  294. 2930   ENLP(ENB)=ENLM(ENB)
  295. 2940   ENEMATP(ENB)=ENKI(ENB)*3+INT(RND*6)+PLLV
  296. 2950   ENAV(ENB)=INT(-ENKI(ENB)*(ENKI(ENB)<PLLV)+RND*(PLLV-1))
  297. 2960 DEF SPRITE 1,ENSPRITE+ENB,(ENNX(ENB),ENNY(ENB)),64+ENKI(ENB)*8,1,1,,0
  298. 2970   SPRITE 0,ENSPRITE+ENB,1
  299. 2980   ENEMYNUM=ENEMYNUM+1:EXNUM=EXNUM+1
  300. 2990 ENDIF
  301. 3000 *ENEMY_MOVE
  302. 3010 OUT &H440,17:OUT &H442,ROL*256,2
  303. 3020 FOR ENA=0 TO ENEMYMAX
  304. 3030   IF ENEX(ENA)=1 THEN 
  305. 3040     ENPATTERN=CTBASE+ENKI(ENA)*8+64
  306. 3050     IF ENEMDD(ENA)>0 THEN
  307. 3060       ENPATTERN=128-ENEMDD(ENA)
  308. 3070       ENEMDD(ENA)=ENEMDD(ENA)-1
  309. 3080       IF ENEMDD(ENA)=0 THEN
  310. 3090         ENEX(ENA)=0:EXNUM=EXNUM-1
  311. 3100         IF ENKI(ENA)=5 THEN BOSSCOUNT=1
  312. 3110 COIN=COIN-INT(ENLM(ENA)/8+ENKI(ENA)*2+PLLV-1)*(PLLV<31)-(PLLV=31)
  313. 3120         GOSUB *COINSP
  314. 3130         IF RND>(ENKI(ENA)/5) THEN MAGNUM=MAGNUM+1:GOSUB *COINSP
  315. 3140         IF (EXNUM=0 AND BOSSCOUNT=1) THEN BOSSFLAG=1
  316. 3150       ENDIF
  317. 3160     ENDIF
  318. 3170     SPRITE 1,ENSPRITE+ENA,ENPATTERN
  319. 3180     IF ENKI(ENA)=4 THEN     'アルゴリズム:ファイア-エレメント
  320. 3190         IF ENWT(ENA)=0 THEN 
  321. 3200           ENWT(ENA)=5
  322. 3210           ENDX(ENA)=((ENNX(ENA)>PLNX)-(ENNX(ENA)<PLNX))*4
  323. 3220           ENDY(ENA)=((ENNY(ENA)>PLNY)-(ENNY(ENA)<PLNY))*4
  324. 3230           IF ENLP(ENA)<>0 THEN
  325. 3240             ENNX(ENA)=ENNX(ENA)+ENDX(ENA)
  326. 3250             ENNY(ENA)=ENNY(ENA)+ENDY(ENA)
  327. 3260             SPRITE 6,ENSPRITE+ENA,ENDX(ENA),ENDY(ENA)
  328. 3270           ENDIF
  329. 3280         ELSE
  330. 3290           ENWT(ENA)=ENWT(ENA)-1
  331. 3300         ENDIF
  332. 3310     ELSE IF ENKI(ENA)=0 THEN 'アルゴリズム:たこさんEX
  333. 3320         IF ENWT(ENA)=0 THEN 
  334. 3330           ENWT(ENA)=40
  335. 3340           ENDX(ENA)=20+INT(RND*200):ENDY(ENA)=10+INT(RND*180)
  336. 3350        SPRITE 6,ENSPRITE+ENA,ENDX(ENA)-ENNX(ENA),ENDY(ENA)-ENNY(ENA)
  337. 3360           ENNX(ENA)=ENDX(ENA):ENNY(ENA)=ENDY(ENA)
  338. 3370         ELSE
  339. 3380           ENWT(ENA)=ENWT(ENA)-1:ENNY(ENA)=ENNY(ENA)+1
  340. 3390           IF ENLP(ENA)>0 THEN SPRITE 6,ENSPRITE+ENA,0,1
  341. 3400           IF (WEEX(ENA)=0 AND ENWT(ENA)=38) THEN
  342. 3410             WEEX(ENA)=1:WECL(ENA)=0:WEDX(ENA)=0:WEDY(ENA)=0
  343. 3420             DEF SPRITE 1,WESPRITE+ENA,(ENNX(ENA),ENNY(ENA)),66,1,1,,0
  344. 3430             SPRITE 0,WESPRITE+ENA,1
  345. 3440           ENDIF
  346. 3450         ENDIF
  347. 3460         IF (WEEX(ENA)=1 AND ENLP(ENA)>0) THEN
  348. 3470           C1=SPRITE(WESPRITE+ENA,6):C2=SPRITE(WESPRITE+ENA,7)
  349. 3480           C1=PLNX-C1:IF C1<>0 THEN C1=C1/ABS(C1)
  350. 3490           C2=PLNY-C2:IF C2<>0 THEN C2=C2/ABS(C2)
  351. 3500           IF (WECL(ENA)=0 AND ENEMDD(ENA)=0) THEN
  352. 3510             WEDX(ENA)=WEDX(ENA)+C1*.3!
  353. 3520             IF ABS(WEDX(ENA))>5 THEN WEDX(ENA)=WEDX(ENA)-C1*.6!
  354. 3530             WEDY(ENA)=WEDY(ENA)+C2*.3!
  355. 3540             IF ABS(WEDY(ENA))>5 THEN WEDY(ENA)=WEDY(ENA)-C2*.6!
  356. 3550           ENDIF
  357. 3560         ENDIF
  358. 3570     ELSE IF ENKI(ENA)=5 THEN 'アルゴリズム:ぷれでぃっとくん
  359. 3580         IF ENWT(ENA)=0 THEN 
  360. 3590           ENWT(ENA)=4
  361. 3600           ENDX(ENA)=(INT(RND*3-1))*1:ENDY(ENA)=(INT(RND*3-1))*1
  362. 3610         ELSE 
  363. 3620           ENWT(ENA)=ENWT(ENA)-1
  364. 3630         IF (ENNX(ENA)<0 OR ENNX(ENA)>240) THEN ENDX(ENA)=-ENDX(ENA)*2
  365. 3640         IF (ENNY(ENA)<0 OR ENNY(ENA)>210) THEN ENDY(ENA)=-ENDY(ENA)*2
  366. 3650         ENDIF
  367. 3660         IF ENLP(ENA)>0 THEN
  368. 3670           SPRITE 6,ENSPRITE+ENA,ENDX(ENA),ENDY(ENA)
  369. 3680           ENNX(ENA)=ENNX(ENA)+ENDX(ENA):ENNY(ENA)=ENNY(ENA)+ENDY(ENA)
  370. 3690         ENDIF
  371. 3700     ELSE IF ENKI(ENA)=1 THEN 'アルゴリズム:スライムDX
  372. 3710         IF ENWT(ENA)=0 THEN 
  373. 3720           ENWT(ENA)=22
  374. 3730           ENDX(ENA)=((ENNX(ENA)>PLNX)-(ENNX(ENA)<PLNX))*4
  375. 3740           ENDY(ENA)=((ENNY(ENA)>PLNY)-(ENNY(ENA)<PLNY))*4
  376. 3750         ELSE
  377. 3760           ENWT(ENA)=ENWT(ENA)-1
  378. 3770           IF ENWT(ENA)<6 THEN
  379. 3780             IF ENNX(ENA)<20 THEN ENDX(ENA)=ABS(ENDX(ENA))
  380. 3790             IF ENNX(ENA)>220 THEN ENDX(ENA)=-ABS(ENDX(ENA))
  381. 3800             IF ENNY(ENA)<20 THEN ENDY(ENA)=ABS(ENDY(ENA))
  382. 3810             IF ENNY(ENA)>200 THEN ENDY(ENA)=-ABS(ENDY(ENA))
  383. 3820             IF ENLP(ENA)>0 THEN
  384. 3830               SPRITE 6,ENSPRITE+ENA,ENDX(ENA),ENDY(ENA)
  385. 3840               ENNX(ENA)=ENNX(ENA)+ENDX(ENA)
  386. 3850               ENNY(ENA)=ENNY(ENA)+ENDY(ENA)
  387. 3860             ENDIF
  388. 3870           ENDIF
  389. 3880         ENDIF
  390. 3890     ELSE IF ENKI(ENA)=3 THEN   'アルゴリズム:半魚人改
  391. 3900         IF ENNY(ENA)<240 THEN ENDY(ENA)=2 ELSE ENDY(ENA)=-256
  392. 3910 IF (ABS(ENNY(ENA)-PLNY)<7 AND ENNX(ENA)<220 AND ENNX(ENA)>20) THEN
  393. 3920           ENDX(ENA)=((ENNX(ENA)>PLNX)-(ENNX(ENA)<PLNX))*3
  394. 3930           ENDY(ENA)=0
  395. 3940         ELSE
  396. 3950           ENDX(ENA)=0
  397. 3960         ENDIF
  398. 3970         IF ENLP(ENA)>0 THEN
  399. 3980           ENNX(ENA)=ENNX(ENA)+ENDX(ENA):ENNY(ENA)=ENNY(ENA)+ENDY(ENA)
  400. 3990           SPRITE 6,ENSPRITE+ENA,ENDX(ENA),ENDY(ENA)
  401. 4000         ENDIF
  402. 4010     ELSE IF ENKI(ENA)=2 THEN   'アルゴリズム:あいあいぱちぱち
  403. 4020         IF ENWT(ENA)=0 THEN
  404. 4030           ENWT(ENA)=40+INT(RND*20)
  405. 4040           ENDX(ENA)=((ENNX(ENA)>PLNX)-(ENNX(ENA)<PLNX))*2
  406. 4050           ENDY(ENA)=6
  407. 4060         ELSE
  408. 4070           ENWT(ENA)=ENWT(ENA)-1
  409. 4080           IF (ENLP(ENA)>0 AND ENWT(ENA)<35) THEN
  410. 4090             SPRITE 6,ENSPRITE+ENA,ENDX(ENA),INT(ENDY(ENA))
  411. 4100             ENNX(ENA)=ENNX(ENA)+ENDX(ENA)
  412. 4110             ENNY(ENA)=ENNY(ENA)+INT(ENDY(ENA))
  413. 4120             ENDY(ENA)=ENDY(ENA)-.3!
  414. 4130             IF ENNY(ENA)>240 THEN
  415. 4140               SPRITE 6,ENSPRITE+ENA,0,-240
  416. 4150               ENNY(ENA)=ENNY(ENA)-240
  417. 4160               ENWT(ENA)=0
  418. 4170             ENDIF
  419. 4180           ENDIF
  420. 4190         ENDIF
  421. 4200         IF (ABS(PLNX-ENNX(ENA))<5 AND ENNX(ENA)>0) THEN
  422. 4210           SPKFLAG=1
  423. 4220         ELSE
  424. 4230           SPKFLAG=0
  425. 4240         ENDIF
  426. 4250         IF SPKFLAG=1 THEN
  427. 4260           IF (WEEX(ENA)=0 AND ENLP(ENA)>0) THEN
  428. 4270             DEF SPRITE 1,WESPRITE+ENA,(ENNX(ENA),ENNY(ENA)),82,1,1,,0
  429. 4280             SPRITE 0,WESPRITE+ENA,1
  430. 4290             WEEX(ENA)=1:WECL(ENA)=2:WEDX(ENA)=0:WEDY(ENA)=6
  431. 4300           ENDIF
  432. 4310         ENDIF
  433. 4320     ENDIF
  434. 4330   ELSE
  435. 4340     GOSUB *NILL
  436. 4350   ENDIF
  437. 4360 NEXT
  438. 4370 FOR ENA=0 TO WEPONMAX          '敵の弾アルゴリズム 
  439. 4380   IF WEEX(ENA)=1 THEN
  440. 4390     WEPATTERN=CTBASE+66+WECL(ENA)*8:SPRITE 1,WESPRITE+ENA,WEPATTERN
  441. 4400     WEDY(ENA)=WEDY(ENA)+(WECL(ENA)<>ENKI(ENA))*(WEDY(ENA)<5)*.4!
  442. 4410     SPRITE 6,WESPRITE+ENA,WEDX(ENA),WEDY(ENA)
  443. 4420     C1=SPRITE(WESPRITE+ENA,6):C2=SPRITE(WESPRITE+ENA,7)
  444. 4430     IF (C1>256 OR C2>240) THEN
  445. 4440       WEEX(ENA)=0
  446. 4450       SPRITE 0,WESPRITE+ENA,0
  447. 4460     ENDIF
  448. 4470   ELSE
  449. 4480     GOSUB *NILL2
  450. 4490   ENDIF
  451. 4500 NEXT
  452. 4510 RETURN
  453. 4520 *BOSS                     'ボスの初期設定
  454. 4530 IF EXNUM=0 THEN 
  455. 4540   GOSUB *INTERMISSION
  456. 4550   OUT &H440,17:OUT &H442,63*256,2
  457. 4560 DEF SPRITE 1,ENSPRITE,(120,70),24,1,1,,0:SPRITE 0,ENSPRITE,1
  458. 4570 LINE (70,110)-(250,110),PSET,7:LINE(69,109)-(251,111),PSET,7,B
  459. 4580 FOR BOA=1 TO 30
  460. 4590   LINE (69-BOA,109-BOA)-(251+BOA,111+BOA),PSET,7,B
  461. 4600   LINE (71-BOA,111-BOA)-(249+BOA,109+BOA),PSET,0,B
  462. 4610 NEXT
  463. 4620 SYMBOL (50,90),"雑魚どもでは埒があかん・・・。",.8!,1.2!,7
  464. 4630 SYMBOL (50,115),"わし自ら、止めを刺してやるわぁっ。",.8!,1.2!,7
  465. 4640 '
  466. 4650 SPRITE 1,ENSPRITE,25:SPRITE 1,PLSPRITE,48
  467. 4660 DEF SPRITE 1,WESPRITE,(120,90),32,1,1,,0:SPRITE 0,WESPRITE,1
  468. 4670 BOA=0
  469. 4680 WHILE(BOA<>-1)
  470. 4690   IF ((SPRITE(PLSPRITE,6)MOD 2)=0 AND BOA>13) THEN
  471. 4700     SPRITE 6,PLSPRITE,2,-(SPRITE(PLSPRITE,7)<190)
  472. 4710     SPRITE 1,PLSPRITE,48+(BOA MOD 4)\ 2
  473. 4720   ENDIF
  474. 4730   SPRITE 1,WESPRITE,32+(BOA MOD 4)
  475. 4740   IF (BOA MOD 4)=3 THEN SPRITE 6,WESPRITE,-9,11:PCMPLAY SE2%
  476. 4750   BOA=BOA+1:IF SPRITE(PLSPRITE,6)>SPRITE(ENSPRITE,6) THEN BOA=-1
  477. 4760   WAIT 5
  478. 4770 WEND
  479. 4780 SPRITE 1,PLSPRITE,50:WAIT 20
  480. 4790 DEF SPRITE 1,PLSPRITE+1,(SPRITE(ENSPRITE,6)+5,SPRITE(PLSPRITE,7)-5),30,1,1,,0:SPRITE 0,PLSPRITE+1,1
  481. 4800 DEF SPRITE 1,WESPRITE,(120,90),32,1,1,,0:SPRITE 0,WESPRITE,1
  482. 4810 BOA=0:SPRITE 1,PLSPRITE,48
  483. 4820 WHILE(BOA<>-1)
  484. 4830   IF ((SPRITE(PLSPRITE,6)MOD 2)=0 AND BOA>13) THEN
  485. 4840     SPRITE 6,PLSPRITE,2,(SPRITE(PLSPRITE,6)>150)
  486. 4850     SPRITE 1,PLSPRITE,48+(BOA MOD 4)\ 2
  487. 4860   ENDIF
  488. 4870   IF (BOA MOD 4)=3 THEN SPRITE 6,WESPRITE,0,11:PCMPLAY SE2%
  489. 4880   SPRITE 6,PLSPRITE+1,0,-3
  490. 4890   IF SPRITE(PLSPRITE+1,7)<SPRITE(ENSPRITE,7)+10 THEN
  491. 4900     LINE (50,90)-(270,139),PSET,0,BF
  492. 4910     PCMPLAY SE1%
  493. 4920     SYMBOL (50,90),"ぐふうっ。",.8!,1.2!,7
  494. 4930     SPRITE 6,PLSPRITE+1,0,256
  495. 4940   ENDIF
  496. 4950   SPRITE 1,WESPRITE,32+(BOA MOD 4)
  497. 4960   BOA=BOA+1:IF SPRITE(PLSPRITE,6)>180 THEN BOA=-1
  498. 4970   WAIT 5
  499. 4980 WEND
  500. 4990 SPRITE 0,PLSPRITE+1,0:SPRITE 0,WESPRITE,0
  501. 5000 LINE (50,90)-(270,139),PSET,0,BF
  502. 5010 FOR BOA=0 TO 4
  503. 5020   SYMBOL (50+12*BOA,90),"・",.8!,1.2!,7:WAIT 70
  504. 5030 NEXT
  505. 5040 WAIT 30:SYMBOL(50,115),"うぬぬ、見るがいい。我が真の姿!!",.8!,1.2!,7
  506. 5050 WAIT 100:SPRITE 1,ENSPRITE,26:WAIT 5:SPRITE 1,ENSPRITE,27:WAIT 75
  507. 5060 FOR BOA=30 TO 1 STEP -1
  508. 5070   LINE (71-BOA,111-BOA)-(249+BOA,109+BOA),PSET,7,B
  509. 5080   LINE (69-BOA,109-BOA)-(251+BOA,111+BOA),PSET,0,B
  510. 5090 NEXT
  511. 5100 LINE(69,109)-(251,111),PSET,0,B:LINE (70,110)-(250,110),PSET,0
  512. 5110 '
  513. 5120 LOAD@ "pentagrm.tif",(60,103)
  514. 5130 SPRITE 0,ENSPRITE,0
  515. 5140   EXNUM=1:PLYMAX=110
  516. 5150   DEF SPRITE 1,ENSPRITE,(90,45),128,4,3,,0:SPRITE 0,ENSPRITE,1
  517. 5160   DEF SPRITE 1,ENSPRITE+12,(26,52),192,2,2,,0
  518. 5170   DEF SPRITE 1,ENSPRITE+16,(199,52),196,2,2,,0
  519. 5180   DEF SPRITE 1,JAWSPRITE,(114,79),201,1,1,,0:SPRITE 0,JAWSPRITE,1
  520. 5190   SPRITE 0,ENSPRITE+12,1:SPRITE 0,ENSPRITE+16,1
  521. 5200   ENSIZEX=19:ENSIZEY=15:ENPATTERN=140
  522. 5210   ENLM(0)=160:ENLP(0)=160:ENLM(1)=120:ENLP(1)=120:ENLM(2)=130
  523. 5220   ENLP(2)=130:ENNX(0)=112:ENNY(0)=61:ENNX(1)=28:ENNY(1)=57
  524. 5230   ENNX(2)=202:ENNY(2)=57
  525. 5240   IF THUNDAMAGE<1 THEN THUNDAMAGE=1
  526. 5250   ENKI(0)=0:ENKI(1)=1:ENKI(2)=2
  527. 5260   ENAV(0)=255:ENAV(1)=INT(ARROWDAM*.8!):ENAV(2)=ENAV(1)
  528. 5270   ENAVP=100:ENAVQ=INT(ARROWDAM*.5!)
  529. 5280   FOR BOA=0 TO 2
  530. 5290     ENEX(BOA)=1
  531. 5300     ENPP(BOA)=0:ENQQ(BOA)=0:ENWT(BOA)=0
  532. 5310     ENEMATP(BOA)=15
  533. 5320   NEXT
  534. 5330 ELSE                        'ボスのアルゴリズムなど
  535. 5340   IF JAWFLAG=1 THEN
  536. 5350     SPRITE 6,JAWSPRITE,0,-4
  537. 5360     JAWFLAG=0
  538. 5370   ENDIF
  539. 5380   IF ENEX(2)=1 THEN
  540. 5390     IF ENLP(2)<=0 THEN 
  541. 5400       ENEX(2)=0
  542. 5410       SPRITE 0,ENSPRITE+16,0
  543. 5420       WEDAMAGE=WEDAMAGE+3
  544. 5430       WEPONMAX=WEPONMAX+3
  545. 5440     ENDIF
  546. 5450     IF ENWT(2)>40 THEN      '右手のアルゴリズム
  547. 5460       ENPP(2)=1-INT(RND*3):ENQQ(2)=1-INT(RND*3)
  548. 5470     ELSE IF ENWT(2)=40 THEN
  549. 5480       ENAV(2)=ENAVQ
  550. 5490       ENPP(2)=INT((PLNX-ENNX(2))/20):ENQQ(2)=INT((PLNY-ENNY(2))/20)
  551. 5500     ELSE IF ENWT(2)=20 THEN
  552. 5510       ENPP(2)=INT((200-ENNX(2))/20):ENQQ(2)=INT((60-ENNY(2))/20)
  553. 5520     ELSE IF ENWT(2)=0 THEN
  554. 5530       ENAV(2)=INT(ARROWDAM*.9!)
  555. 5540       ENWT(2)=80+INT(RND*40):ENPP(2)=200-ENNX(2):ENQQ(2)=50-ENNY(2)
  556. 5550       ENNX(2)=ENNX(2)+ENPP(2):ENNY(2)=ENNY(2)+ENQQ(2)
  557. 5560       SPRITE 6,ENSPRITE+16,ENPP(2),ENQQ(2)
  558. 5570     ENDIF
  559. 5580     ENWT(2)=ENWT(2)-1
  560. 5590     ENNX(2)=ENNX(2)+ENPP(2):ENNY(2)=ENNY(2)+ENQQ(2)
  561. 5600     SPRITE 6,ENSPRITE+16,ENPP(2),ENQQ(2)
  562. 5610   ENDIF
  563. 5620   IF ENEX(1)=1 THEN
  564. 5630     IF ENLP(1)<=0 THEN 
  565. 5640       ENEX(1)=0
  566. 5650       SPRITE 0,ENSPRITE+12,0
  567. 5660       WEDAMAGE=WEDAMAGE+3
  568. 5670       WEPONMAX=WEPONMAX+3
  569. 5680     ENDIF
  570. 5690     IF ENWT(1)>40 THEN      '左手のアルゴリズム
  571. 5700       ENPP(1)=1-INT(RND*3):ENQQ(1)=1-INT(RND*3)
  572. 5710     ELSE IF ENWT(1)=40 THEN
  573. 5720       ENAV(1)=ENAVQ
  574. 5730       ENPP(1)=INT((PLNX-ENNX(1))/20):ENQQ(1)=INT((PLNY-ENNY(1))/20)
  575. 5740     ELSE IF ENWT(1)=20 THEN
  576. 5750       ENPP(1)=INT((25-ENNX(1))/20):ENQQ(1)=INT((60-ENNY(1))/20)
  577. 5760     ELSE IF ENWT(1)=0 THEN
  578. 5770       ENAV(1)=INT(ARROWDAM*.9!)
  579. 5780       ENWT(1)=80+INT(RND*40):ENPP(1)=25-ENNX(1):ENQQ(1)=50-ENNY(1)
  580. 5790       ENNX(1)=ENNX(1)+ENPP(1):ENNY(1)=ENNY(1)+ENQQ(1)
  581. 5800       SPRITE 6,ENSPRITE+12,ENPP(1),ENQQ(1)
  582. 5810     ENDIF
  583. 5820     ENWT(1)=ENWT(1)-1
  584. 5830     ENNX(1)=ENNX(1)+ENPP(1):ENNY(1)=ENNY(1)+ENQQ(1)
  585. 5840     SPRITE 6,ENSPRITE+12,ENPP(1),ENQQ(1)
  586. 5850   ENDIF
  587. 5860   IF ENEX(0)=1 THEN                 'ボスの頭のアルゴリズム(108,58)
  588. 5870     IF ENLP(0)<=0 THEN 
  589. 5880       IF ENPATTERN MOD 12=0 THEN 
  590. 5890         SPRITE 1,ENSPRITE,ENPATTERN-4
  591. 5900         SPRITE 0,JAWSPRITE,0
  592. 5910       ENDIF
  593. 5920       ENPATTERN=ENPATTERN+1:IF ENPATTERN>190 THEN ENEX(0)=0
  594. 5930     ENDIF
  595. 5940     IF ENWT(0)<=0 THEN ENWT(0)=20
  596. 5950     IF ENWT(0)>10 THEN ENPP(0)=1 ELSE ENPP(0)=-1
  597. 5960     ENPP(0)=ENPP(0)*INT(RND*4)
  598. 5970     ENWT(0)=ENWT(0)-1
  599. 5980     ENNX(0)=ENNX(0)+ENPP(0)
  600. 5990     IF (ENNX(0)<50 OR ENNX(0)>200) THEN 
  601. 6000       ENNX(0)=ENNX(0)-ENPP(0)*3
  602. 6010       ENPP(0)=-ENPP(0)*2
  603. 6020     ENDIF
  604. 6030     IF ENLP(0)>0 THEN
  605. 6040       SPRITE 6,ENSPRITE,ENPP(0),0
  606. 6050       SPRITE 6,JAWSPRITE,ENPP(0),0
  607. 6060       IF RND<.2! THEN                   'ボスが弾を吐く
  608. 6070         BOB=-1
  609. 6080         FOR BOA=0 TO ENEMYMAX-(ENEX(1)=0)*3-(ENEX(2)=0)*3
  610. 6090           IF WEEX(BOA)=0 THEN BOB=BOA
  611. 6100         NEXT
  612. 6110         IF BOB<>-1 THEN 
  613. 6120           IF JAWFLAG=0 THEN SPRITE 6,JAWSPRITE,0,4
  614. 6130           WEEX(BOB)=1:JAWFLAG=7
  615. 6140           DEF SPRITE 1,WESPRITE+BOB,(ENNX(0)+10,87),200,1,1,,0
  616. 6150           SPRITE 0,WESPRITE+BOB,1
  617. 6160           WEDX(BOB)=2-INT(RND*5):WEDY(BOB)=5-INT(RND*4)
  618. 6170         ENDIF
  619. 6180       ENDIF
  620. 6190     ENDIF
  621. 6200   ENDIF
  622. 6210   FOR BOA=0 TO WEPONMAX
  623. 6220     IF WEEX(BOA)=1 THEN
  624. 6230       SPRITE 6,WESPRITE+BOA,WEDX(BOA),WEDY(BOA)
  625. 6240       IF SPRITE(WESPRITE+BOA,7)>255 THEN
  626. 6250         WEEX(BOA)=0
  627. 6260         SPRITE 0,WESPRITE+BOA,0
  628. 6270       ENDIF
  629. 6280      ENDIF
  630. 6290    NEXT
  631. 6300 ENDIF
  632. 6310 IF ENEX(0)=0 THEN *ENDING
  633. 6320 IF (ENEX(1)+ENEX(2)=0 AND JAWFLAG>0) THEN ENAVP=0 ELSE ENAVP=255
  634. 6330 ENAV(0)=ENAVP+ENAVQ+INT(PLLV/2)
  635. 6340 RETURN
  636. 6350 '
  637. 6360 *DAMAGE
  638. 6370 FOR DME=0 TO ENEMYMAX
  639. 6380   IF (ENEX(DME)=1 AND ENEMDD(DME)=0) THEN 
  640. 6390     EXFLAG=1
  641. 6400     C1=PLNX-ENNX(DME):C2=PLNY-ENNY(DME)     'プレイヤーへのダメージ
  642. 6410     IF (ABS(C1)<ENSIZEX AND ABS(C2)<ENSIZEY) THEN
  643. 6420       PLLP=PLLP+(ENEMATP(DME)-PLAV)*(ENEMATP(DME)>PLAV)
  644. 6430       IF PLLP>0 THEN
  645. 6440         PCMPLAY SE8%
  646. 6450       ELSE
  647. 6460         PCMPLAY SE9%:PLLP=0
  648. 6470       ENDIF
  649. 6480       PLDX=((C1<0)-(C1>0))*6:PLDY=((C2<0)-(C2>0))*6
  650. 6490       PLNX=PLNX+PLDX:PLNY=PLNY+PLDY
  651. 6500       SPRITE 6,PLSPRITE,PLDX,PLDY
  652. 6510       IF BOSSFLAG=0 THEN
  653. 6520         SPRITE 6,ENSPRITE+DME,-PLDX,-PLDY
  654. 6530         ENNX(DME)=ENNX(DME)-PLDX:ENNY(DME)=ENNY(DME)-PLDY
  655. 6540       ENDIF
  656. 6550       ENENUM=DME:GOSUB *ENEMY_LPMAX
  657. 6560       GOSUB *PLAYER_LP
  658. 6570     ENDIF
  659. 6580     FOR DMA=0 TO ARROWMAX          '敵へのダメージ
  660. 6590       IF AREX(DMA)<>0 THEN
  661. 6600         C1=SPRITE(PLSPRITE+DMA+1,6)-ENNX(DME)
  662. 6610         C2=SPRITE(PLSPRITE+DMA+1,7)-ENNY(DME)
  663. 6620         IF (C1>-2 AND C1<ENSIZEX AND C2>-8 AND C2<ENSIZEY) THEN 
  664. 6630           DMPTS=ARROWDAM-ENAV(DME)
  665. 6640           IF DMPTS>0 THEN
  666. 6650             PCMPLAY SE1%
  667. 6660           ELSE
  668. 6670             PCMPLAY SE4%
  669. 6680             AREX(DMA)=1
  670. 6690           ENDIF
  671. 6700           ENLP(DME)=ENLP(DME)+DMPTS*(DMPTS>0)
  672. 6710           ENENUM=DME:GOSUB *ENEMY_LPMAX
  673. 6720           IF AREX(DMA)=1 THEN AREX(DMA)=0:SPRITE 0,PLSPRITE+DMA+1,0
  674. 6730         ENDIF
  675. 6740       ELSE
  676. 6750         GOSUB *NILL2
  677. 6760       ENDIF
  678. 6770     NEXT
  679. 6780     ELSE
  680. 6790       GOSUB *NILL2
  681. 6800   ENDIF
  682. 6810 NEXT
  683. 6820 FOR DMW=0 TO WEPONMAX              '敵の弾のダメ-ジ
  684. 6830   IF WEEX(DMW)=1 THEN
  685. 6840     C1=PLNX-SPRITE(WESPRITE+DMW,6):C2=PLNY-SPRITE(WESPRITE+DMW,7)
  686. 6850     IF (ABS(C1)<10 AND ABS(C2)<10) THEN
  687. 6860       PLLP=PLLP-WEDAMAGE
  688. 6870       IF PLLP>0 THEN
  689. 6880         PCMPLAY SE8%
  690. 6890       ELSE
  691. 6900         PCMPLAY SE9%:PLLP=0
  692. 6910       ENDIF
  693. 6920       PLDX=((C1<0)-(C1>0))*4:PLDY=((C2<0)-(C2>0))*4
  694. 6930       PLNX=PLNX+PLDX:PLNY=PLNY+PLDY
  695. 6940       SPRITE 6,PLSPRITE,PLDX,PLDY
  696. 6950       GOSUB *PLAYER_LP
  697. 6960       SPRITE 0,WESPRITE+DMW,0:WEEX(DMW)=0
  698. 6970     ENDIF
  699. 6980   ELSE
  700. 6990     GOSUB *NILL2
  701. 7000   ENDIF
  702. 7010 NEXT
  703. 7020 '
  704. 7030 RETURN
  705. 7040 '
  706. 7050 *COUNTER_CH 
  707. 7060 IF CTBASE=1 THEN CTBASE=0 ELSE CTBASE=1
  708. 7070 IF ARWFLAG>0 THEN ARWFLAG=ARWFLAG-1
  709. 7080 IF BARFLAG>0 THEN BARFLAG=BARFLAG-1
  710. 7090   IF BARFLAG=1 THEN GOSUB *BARERASE
  711. 7100 IF JAWFLAG>0 THEN JAWFLAG=JAWFLAG-1
  712. 7110 ROL=(ROL+255)MOD 256
  713. 7120 RETURN
  714. 7130 '
  715. 7140 *GAMEOVER
  716. 7150 WAIT 50
  717. 7160 SPRITE 1,PLSPRITE,52:WAIT 10:SPRITE 1,PLSPRITE,53:WAIT 50
  718. 7170 PLAY OFF
  719. 7180 IF CREDIT>0 THEN SPRITE 0,213,1:SPRITE 0,214,1
  720. 7190 PLAY "@58o2v5 f16a+16b4a+4e8c2"
  721. 7200     DEF SPRITE 1,8,(175,412),112,1,1,,0:SPRITE 0,8,1:DD(0)=72
  722. 7210     DEF SPRITE 1,9,(278,448),113,1,1,,0:SPRITE 0,9,1:DD(1)=56
  723. 7220     DEF SPRITE 1,10,(383,492),114,1,1,,0:SPRITE 0,10,1:DD(2)=40
  724. 7230     DEF SPRITE 1,11,(484,20),115,1,1,,0:SPRITE 0,11,1:DD(3)=24
  725. 7240     DEF SPRITE 1,12,(284,140),116,1,1,,0:SPRITE 0,12,1:DD(4)=-24
  726. 7250     DEF SPRITE 1,13,(385,180),117,1,1,,0:SPRITE 0,13,1:DD(5)=-40
  727. 7260     DEF SPRITE 1,14,(490,224),118,1,1,,0:SPRITE 0,14,1:DD(6)=-56
  728. 7270     DEF SPRITE 1,15,(81,260),119,1,1,,0:SPRITE 0,15,1:DD(7)=-72
  729. 7280     PAI=3.14159265#/50
  730. 7290     GOA=90
  731. 7300     WHILE(GOA>0)
  732. 7310       FOR GOB=0 TO 7
  733. 7320         DXO=COS(PAI*(GOA))*DD(GOB):DXN=COS(PAI*(GOA-1))*DD(GOB)
  734. 7330         DYN=SIN(PAI*(GOA+1))*DD(GOB):DYO=SIN(PAI*(GOA))*DD(GOB)
  735. 7340         SPRITE 6,GOB+8,((DXO-DXN)*GOA)/15,((DYO-DYN)*GOA)/20
  736. 7350       NEXT
  737. 7360       GOA=GOA-1
  738. 7370     WEND
  739. 7380 FOR GOA=0 TO 7:CNTN(GOA)=0:NEXT:GOA=0:GOB=PAD(1)
  740. 7390 *GO_TROOP
  741. 7400 T=PTRIG(1):S=PAD(1)
  742. 7410 IF (S<>GOB AND S<>0) THEN
  743. 7420   IF GOA=8 THEN GOA=7:FOR GOC=0 TO 6:CNTN(GOC)=CNTN(GOC+1):NEXT
  744. 7430   CNTN(GOA)=S:GOA=GOA+1:GOB=S
  745. 7440 ENDIF
  746. 7450 IF T=0 THEN GOTO *GO_TROOP
  747. 7460 '
  748. 7470 IF (CNTN(0)=1 AND CNTN(1)=7 AND CNTN(2)=5 AND CNTN(3)=1 AND CNTN(4)=7 AND CNTN(5)=5 AND CNTN(6)=3 AND CNTN(7)=1 AND CREDIT>0) THEN
  749. 7480   CREDIT=CREDIT-1:SPRITE 1,214,224+CREDIT
  750. 7490   PLLP=1:GOSUB *BARERASE:GOSUB *MOJI_SET
  751. 7500   FOR PLLP=2 TO PLLM:GOSUB *PLAYER_LP:NEXT
  752. 7510   SPRITE 1,PLSPRITE,52:WAIT 10:SPRITE 1,PLSPRITE,48
  753. 7520    SPRITE 0,213,0:SPRITE 0,214,0
  754. 7530   RETURN
  755. 7540 ELSE
  756. 7550   FOR GOA=8 TO 15:SPRITE 0,GOA,0:NEXT
  757. 7560   FOR GOA=72 TO 80:SPRITE 0,GOA,0:NEXT
  758. 7570   SPRITE 0,PLSPRITE,0:SPRITE 0,5,0:SPRITE 0,66,0:SPRITE 0,70,0
  759. 7580   FOR GOA=0 TO ARROWMAX
  760. 7590     IF AREX(GOA)<>0 THEN SPRITE 0,PLSPRITE+1+GOA,0:AREX(GOA)=0
  761. 7600   NEXT
  762. 7610   FOR GOA=0 TO WEPONMAX
  763. 7620     IF WEEX(GOA)=1 THEN SPRITE 0,WESPRITE+GOA,0:WEEX(GOA)=0
  764. 7630   NEXT
  765. 7640   WEPONMAX=WEPONMAX+(ENEX(1)=0)*3+(ENEX(2)=0)*3
  766. 7650   IF BOSSFLAG=0 THEN
  767. 7660     FOR GOA=0 TO ENEMYMAX
  768. 7670       IF ENEX(GOA)=1 THEN SPRITE 0,ENSPRITE+GOA,0:ENEX(GOA)=0
  769. 7680     NEXT
  770. 7690   ELSE
  771. 7700     SPRITE 0,ENSPRITE,0:SPRITE 0,JAWSPRITE,0
  772. 7710   SPRITE 0,ENSPRITE+12,0:SPRITE 0,ENSPRITE+16,0
  773. 7720   ENDIF
  774. 7730   SPRITE 0,0,0:SPRITE 0,3,0
  775. 7740   FOR GOA=6 TO 50:SPRITE 0,GOA,0:NEXT
  776. 7750   RETURN *SHOKISETTEI
  777. 7760 ENDIF
  778. 7770 '
  779. 7780 *ENDING
  780. 7790 SPRITE 0,ENSPRITE,0
  781. 7800 PLDX=0
  782. 7810 FOR A=0 TO ARROWMAX
  783. 7820   IF AREX(A)<>0 THEN
  784. 7830     SPRITE 6,PLSPRITE+A+1,0,ARROWSPEED
  785. 7840     C1=SPRITE(PLSPRITE+A+1,7)
  786. 7850     IF C1>255 THEN
  787. 7860       AREX(A)=0
  788. 7870       SPRITE 0,PLSPRITE+A+1,0
  789. 7880     ENDIF
  790. 7890     PLDX=-1
  791. 7900   ENDIF
  792. 7910 NEXT
  793. 7920 FOR A=0 TO WEPONMAX
  794. 7930   IF WEEX(A)=1 THEN
  795. 7940     SPRITE 6,WESPRITE+A,WEDX(A),3
  796. 7950     C1=SPRITE(WESPRITE+A,7)
  797. 7960     IF C1>255 THEN 
  798. 7970     WEEX(A)=0
  799. 7980     SPRITE 0,WESPRITE+A,0
  800. 7990     ENDIF
  801. 8000      PLDX=-1
  802. 8010   ENDIF
  803. 8020 NEXT
  804. 8030 IF PLDX=-1 THEN WAIT 3:GOTO *ENDING
  805. 8040 CTBASE=0
  806. 8050 DEF SPRITE 1,PLSPRITE-1,(PLNX,240),46,1,1,,0:SPRITE 0,PLSPRITE-1,1
  807. 8060 *PL_ROOP
  808. 8070 CTBASE=CTBASE XOR 1
  809. 8080 SPRITE 1,PLSPRITE-1,CTBASE+54
  810. 8090 SPRITE 6,PLSPRITE-1,0,-4
  811. 8100 C1=SPRITE(PLSPRITE-1,7)
  812. 8110 IF C1<PLNY-8 THEN
  813. 8120   PLNY=PLNY-4
  814. 8130   SPRITE 6,PLSPRITE,0,-4:SPRITE 1,PLSPRITE,31
  815. 8140 ENDIF
  816. 8150 IF C1>255 THEN
  817. 8160   SPRITE 1,PLSPRITE,0:SPRITE 1,PLSPRITE-1,0
  818. 8170 ELSE
  819. 8180   WAIT 4
  820. 8190   GOTO *PL_ROOP
  821. 8200 ENDIF
  822. 8210 FOR A=6 TO 50:SPRITE 0,A,0:NEXT
  823. 8220 SPRITE 0,0,0:SPRITE 0,66,0:SPRITE 0,70,0:SPRITE 0,3,0:SPRITE 0,5,0
  824. 8230 FOR A=72 TO 80:SPRITE 0,A,0:NEXT
  825. 8240 FOR A=63 TO 1 STEP -1
  826. 8250   OUT &H440,17:OUT &H442,A*256,2:WAIT 1
  827. 8260 NEXT
  828. 8270 LOAD@ "pentagm2.tif",(60,40)
  829. 8280 FOR A=1 TO 7
  830. 8290   LINE (0,0)-(319,255),OR,[2^A,2^A,2^A],BF
  831. 8300 NEXT
  832. 8310 FOR A=31 TO 0 STEP -1
  833. 8320   LINE(0,0)-(319,255),PSET,[A*8,A*8,A*8,0],BF
  834. 8330 NEXT
  835. 8340 OUT &H440,17:OUT &H442,0,2
  836. 8350 LOAD@ "bg_end.tif",(32,0)
  837. 8360 DEF SPRITE 1,0,(220,194),292,2,2,,0:SPRITE 0,0,1
  838. 8370 DEF SPRITE 1,10,(20,495),264,7,1,,0:SPRITE 0,10,1
  839. 8380 DEF SPRITE 1,20,(50,256),271,11,1,,0:SPRITE 0,20,1
  840. 8390 DEF SPRITE 1,40,(460,170),282,4,1,,0:SPRITE 0,40,1
  841. 8400 DEF SPRITE 1,50,(256,170),286,6,1,,0:SPRITE 0,50,1
  842. 8410 '
  843. 8420 WHILE(SPRITE(10,7)<>80):SPRITE 6,10,0,1:WAIT 1:WEND
  844. 8430 FOR EDA=0 TO 116
  845. 8440   SPRITE 6,20,0,-1:SPRITE 6,40,1,0:SPRITE 6,50,-1,0
  846. 8450   WAIT 1
  847. 8460 NEXT
  848. 8470 WAIT 2000:CLS
  849. 8480 END
  850. 8490 GOTO 8490
  851. 8500 '
  852. 8510 *INTERMISSION
  853. 8520 PLYMAX=170
  854. 8530 DEF SPRITE 1,THSPRITE,(128,500),40,1,8,,0:SPRITE 0,THSPRITE,1
  855. 8540 PCMPLAY SE2%
  856. 8550 FOR INA=0 TO 10
  857. 8560   SPRITE 6,THSPRITE,RND*240-SPRITE(THSPRITE,6),500-RND*200-SPRITE(THSPRITE,7)
  858. 8570 NEXT
  859. 8580 FOR INA=1 TO 360
  860. 8590   SPRITE 1,PLSPRITE,INT((INA MOD 4)/2)+48
  861. 8600   PLDY=(PLNY>PLYMAX)-(PLNY<PLYMAX):PLDX=(PLNX>42)-(PLNX<42)
  862. 8610   PLNX=PLNX+PLDX:PLNY=PLNY+PLDY:SPRITE 6,PLSPRITE,PLDX,PLDY
  863. 8620   IF INA>256 THEN INX=256 ELSE INX=INA
  864. 8630   PASTEL INX
  865. 8640   LINE (0,ROL)-(319,ROL),PASTEL,0
  866. 8650   OUT &H440,17:OUT &H442,ROL*256,2
  867. 8660   ROL=(ROL+255) MOD 256
  868. 8670   LINE (0,ROL)-(319,ROL),PASTEL,0
  869. 8680   OUT &H440,17:OUT &H442,ROL*256,2
  870. 8690   IF INA<PLLV*10 THEN 
  871. 8700     TX=RND*240-SPRITE(THSPRITE,6):TY=500-RND*120-SPRITE(THSPRITE,7)
  872. 8710     SPRITE 6,THSPRITE,INT(TX),INT(TY):PCMPLAY SE2%
  873. 8720   ELSE
  874. 8730     SPRITE 0,THSPRITE,0
  875. 8740   ENDIF
  876. 8750   FOR INB=0 TO WEPONMAX
  877. 8760     IF WEEX(INB)=1 THEN
  878. 8770       SPRITE 1,WESPRITE+INB,WECL(INB)*8+66+(INA MOD 2)
  879. 8780       WEDY(INB)=WEDY(INB)-(WEDY(INB)<5)*.4!
  880. 8790       SPRITE 6,WESPRITE+INB,WEDX(INB),WEDY(INB)
  881. 8800       C1=SPRITE(WESPRITE+INB,6):C2=SPRITE(WESPRITE+INB,7)
  882. 8810       IF (C1>240 OR C2>240) THEN
  883. 8820         WEEX(INB)=0
  884. 8830         SPRITE 0,WESPRITE+INB,0
  885. 8840       ENDIF
  886. 8850     ENDIF
  887. 8860   NEXT
  888. 8870   FOR INB=0 TO ARROWMAX
  889. 8880     IF AREX(INB)<>0 THEN
  890. 8890       SPRITE 6,INB+PLSPRITE+1,0,ARROWSPEED
  891. 8900       C1=SPRITE(PLSPRITE+INB+1,7)
  892. 8910       IF C1>255 THEN
  893. 8920         AREX(INB)=0
  894. 8930         SPRITE 0,PLSPRITE+INB+1,0
  895. 8940       ENDIF
  896. 8950     ENDIF
  897. 8960   NEXT
  898. 8970   IF INA=100 THEN GOSUB *BARERASE
  899. 8980 NEXT
  900. 8990 CLS
  901. 9000 RETURN
  902. 9010 '
  903. 9020 *MAIN
  904. 9030 ARB=0:CREDIT=3:SPRITE 1,214,224+CREDIT:SPRITE 0,213,1:SPRITE 0,214,1
  905. 9040 FOR A=0 TO ARROWMAX:AREX(A)=0:NEXT
  906. 9050 FOR A=0 TO ENEMYMAX:ENEX(A)=0:ENEMDD(A)=0:WEEX(A)=0:NEXT
  907. 9060 LOAD@ "bg_x_2.tif",(0,0)
  908. 9070 SPRITE 0,200,1:SPRITE 0,205,1
  909. 9080 FOR MIA=0 TO 7:CNTN(MIA)=0:NEXT
  910. 9090 SLOP=300:MIA=0:MIB=PAD(1)
  911. 9100 T=-1:CDPAU=0:NTLPAD=0
  912. 9110 *SELECT_LOOP
  913. 9120 T=PTRIG(1):S=PAD(1)+T*10
  914. 9130 SLOP=(SLOP+1) MOD 1300
  915. 9140 IF SLOP<300 THEN SPRITE 0,200,0 ELSE SPRITE 0,200,1
  916. 9150 IF (S<>MIB AND S<>0 AND S<>10) THEN
  917. 9160   IF MIA=8 THEN MIA=7:FOR MIC=0 TO 6:CNTN(MIC)=CNTN(MIC+1):NEXT
  918. 9170   CNTN(MIA)=S:MIA=MIA+1:MIB=S
  919. 9180 ENDIF
  920. 9190 IF (S=1 OR S=3 OR S=5 OR S=7) THEN
  921. 9200   NTLPAD=1
  922. 9210   CDSTAT SDATA%
  923. 9220   ON (S+1)/2 GOTO *COPE,*CUP,*CSTOP,*CDOWN
  924. 9230 *CSTOP
  925. 9240   CD STOP:GOTO *CEND
  926. 9250 *CUP
  927. 9260   CD PLAY SDATA%(5)+1:GOTO *CEND
  928. 9270 *CDOWN
  929. 9280   CD PLAY SDATA%(5)+1*(SDATA%(5)>1):GOTO *CEND
  930. 9290 *COPE
  931. 9300   IF SDATA%(1)=1 THEN
  932. 9310       CD PAUSE:CDPAU=1
  933. 9320     ELSE IF CDPAU=1 THEN
  934. 9330       CD CONT:CDPAU=0
  935. 9340     ELSE
  936. 9350       CD PLAY
  937. 9360   ENDIF
  938. 9370 ENDIF
  939. 9380 *CEND
  940. 9390 IF (NTLPAD=1 AND PAD(1)<>0) THEN GOTO *CEND
  941. 9400 NTLPAD=0
  942. 9410 IF T<>8 THEN GOTO *SELECT_LOOP
  943. 9420 LINE (0,0)-(319,239),PSET,0,BF
  944. 9430 '
  945. 9440 SPRITE 0,200,0:SPRITE 0,205,0:SPRITE 0,213,0:SPRITE 0,214,0
  946. 9450 LOAD@ "bg_grnd2.tif",(32,0):ROL=0
  947. 9460 DEF SPRITE 1,66,(218,199),36,2,2,,0:SPRITE 0,66,1'魔法枠
  948. 9470 DEF SPRITE 1,70,(163,185),70,2,1,,0:SPRITE 0,70,1'COINの文字表示
  949. 9480 DEF SPRITE 1,77,(236,216),300,1,1,,0:SPRITE 0,77,1'魔法個数(1桁)
  950. 9490 DEF SPRITE 1,78,(244,211),0,1,1,,0:SPRITE 0,78,1'魔法個数(桁溢れ表示)
  951. 9500 DEF SPRITE 1,79,(222,207),28,1,1,,0:SPRITE 0,79,1'魔法シンボル
  952. 9510 FOR A=0 TO 3
  953. 9520   DEF SPRITE 1,72+A,(236-A*8,186),224,1,1,,0
  954. 9530   SPRITE 0,72+A,1
  955. 9540 NEXT
  956. 9550 DEF SPRITE 1,76,(198,186),225,1,1,,0:SPRITE 0,76,1
  957. 9560 DEF SPRITE 1,5,(244,181),0,1,1,,0:SPRITE 0,5,1
  958. 9570 DEF SPRITE 1,80,(214,188),257,1,1,,0:SPRITE 0,80,1
  959. 9580 '
  960. 9590 ARROWSPEED=-5:ARROWDAM=5:WEDAMAGE=6:THUNDAMAGE=16:MAGNUM=9
  961. 9600 IF CNTN(0)=1 THEN MAGNUM=19
  962. 9610 IF (CNTN(0)=11 AND CNTN(1)=17 AND CNTN(2)=13 AND CNTN(3)=15 AND CNTN(4)=20 AND CNTN(5)=40 AND CNTN(6)=20 AND CNTN(7)=80) THEN MAGNUM=99999
  963. 9620 COIN=0:PLLV=1:CONEXT=70:GOSUB *COINSP
  964. 9630 PLLM=56:PLLP=PLLM:GOSUB *MOJI_SET     'LPの最大値は160
  965. 9640 PLNX=120:PLNY=170:PLYMAX=30:PLAV=0
  966. 9650 DEF SPRITE 1,PLSPRITE,(PLNX,PLNY),48,1,1,,0:SPRITE 0,PLSPRITE,1
  967. 9660 CTBASE=0
  968. 9670 ENNUM=0:BOTTA=-1:BOTTAPUSH=0
  969. 9680 ENEMYNUM=0:EXNUM=0:BOSSFLAG=0:JAWFLAG=0
  970. 9690 ENSIZEX=12:ENSIZEY=9:TRGB=0:BOSSCOUNT=0:PDCH=0
  971. 9700 '
  972. 9710 *LOOP_MAIN
  973. 9720 IF T=4 THEN GOSUB *PAUSE
  974. 9730 GOSUB *PLAYER
  975. 9740 IF TRGB=1 THEN SPRITE 0,THSPRITE,0:TRGB=0
  976. 9750 IF BOSSFLAG=0 THEN GOSUB *ENEMY ELSE GOSUB *BOSS
  977. 9760 GOSUB *DAMAGE
  978. 9770 GOSUB *COUNTER_CH
  979. 9780 GOTO *LOOP_MAIN
  980.